/*设计一个程序满足下列要求：
 *1）要求创建一个管道，复制进程
 *2）父进程每隔2s生成一个10以内的随机数写入管道，写20次
 *3）子进程总管道中读取数据，另存到/home/testfile中，文件所有者可读可写，其他的只读
*/
 #include<stdio.h>
 #include<stdlib.h>
 #include<unistd.h>
 #include<sys/types.h>
 #include<wait.h>

int main()
{
	int i,j,fd,nbytes;
	char buf;
	pid_t result;
	int pipe_fd[2];
	memset(buf,0,sizeof(buf));	/*Initial Operate*/
	if (pipe(pipe_fd)<0)
	{
		printf("creat error");
		return -1;
	}
	result=fork();
	if (result<0)
	{
		perror("fork error");
		exit;
	}
	else if(result==0)	/*child process*/
	{
		if((fd=open("/home/testfile",O_CREAT|O_TRUNC|O_RDWR,0644))<0)
		{
			perror("Open faild");
			exit(0);
		}
		close(pipe_fd[1]);
		while((nbytes=read(pipe_fd[0],buf,20)>0)
		{
			if(write(fd,buf,nbytes)==-1)
			{
				perror("write error");
				exit(0);
			}
		}
		close(fd);
		close(pipe_fd[0]);

		exit(0);
	}
	else				/*parent process*/
	{
		close(pipe_fd[0]);
		srand((int)time(0));	/*rand seed*/
		for(i=0;i<20;i++)
		{
			j=1+(int)(10*rand()/(RAND_MAX+1.0));
			if(write(pipe_fd[1],j,1)==-1)
			{
				perror(write error);
				exit(0);
			}
			sleep(2);
		}
		close(pipe_fd[1]);
		waitpid(result,NULL,0);
		exit(0);
	}
}
